package sqltemplate

import (
	"database/sql"
	"errors"
	"taotaosql/pkg/utils"
)

//事务对象
type TX struct {
	tx0 *sql.Tx
	err error
}

//获取原生的sql包的Tx对象，如有使用原生api需求可以调此方法
func (tx *TX) Tx() *sql.Tx {
	return tx.tx0
}

func (tx *TX) Rollback() error {
	return tx.tx0.Rollback()
}

func (tx *TX) Commit() error {
	return tx.tx0.Commit()
}

/*
   根据主键查询
   @param db 数据库连接池
   @param out 返回对象
*/
func (tx *TX) SelectByPk(id interface{}, out *interface{}) {
	if tx.err != nil {
		return
	}

	if !utils.IsStruct(out) {
		panic(errors.New("out is not struct"))
	}

}

/*
   根据sql查询
   @param out 结果的接收者
   @param sql
   @param args 参数
*/

func (tx *TX) Select(out []interface{}, sql string, args ...interface{}) {
	if tx.err != nil {
		return
	}

}

func (tx *TX) Insert(target *interface{}) int {
	if tx.err != nil {
		return 0
	}

	if !utils.IsStruct(target) {
		panic(errors.New("target is not struct"))
	}

	return 0
}

func (tx *TX) InsertBatch(targets ...interface{}) (int, error) {
	if tx.err != nil {
		return 0, tx.err
	}

	return 0, nil
}

func (tx *TX) Update(target *interface{}) int {

	if tx.err != nil {
		return 0
	}

	if !utils.IsStruct(target) {
		panic(errors.New("target is not struct"))
	}

	return 0
}

func (tx *TX) UpdateBatch(target *interface{}) (int, error) {
	if tx.err != nil {
		return 0, tx.err
	}

	return 0, nil
}
